GitHub Copilotのエージェント機能まとめ
Claude Codeを使っていると、GitHub Copilotにも同様のエージェント機能があるのか気になる。結論から言うと、Copilotにもサブエージェント、タスク委譲、カスタムエージェントの機能がある。ただし設計思想が異なり、理解するには少し整理が必要だった。
本記事では、Claude Codeユーザーの視点からGitHub Copilotのエージェント機能を整理する。
全体像:2つの実行環境
GitHub Copilotのエージェント機能を理解する上で最も重要なのは、2つの異なる実行環境があるという点である。
┌─────────────────────────────────────────────────────────────┐
│ GitHub Copilot │
│ │
│ ┌─────────────────────┐ ┌─────────────────────┐ │
│ │ Agent Mode │ │ Coding Agent │ │
│ │ (ローカル) │ │ (クラウド) │ │
│ │ │ │ │ │
│ │ - VS Code内で実行 │ │ - GitHub Actions │ │
│ │ - 未コミット差分◯ │ │ - コミット済みのみ │ │
│ │ - リアルタイム編集 │ │ - 非同期でPR作成 │ │
│ │ - #runSubagent │ │ - /delegate │ │
│ └─────────────────────┘ └─────────────────────┘ │
└─────────────────────────────────────────────────────────────┘
| 環境 | 実行場所 | 未コミット差分 | 用途 |
|---|---|---|---|
| Agent Mode | ローカル(VS Code) | 見える | リアルタイム開発 |
| Coding Agent | クラウド(GitHub Actions) | 見えない | 非同期タスク委譲 |
Claude Codeはローカル実行のみなので、この「クラウドで非同期実行」という選択肢はCopilot固有の特徴である。
サブエージェントの仕組み
基本概念
サブエージェントは独自のコンテキストウィンドウを持ち、メインセッションとは分離されて動作する。これはClaude Codeと同じアーキテクチャパターンである。
[メインエージェント]
│
├─→ [サブエージェントA] ─→ 結果のみ返却
├─→ [サブエージェントB] ─→ 結果のみ返却
└─→ [サブエージェントC] ─→ 結果のみ返却
共通の制約:
- 深さは1レベルのみ(サブエージェントからサブエージェントは呼べない)
- 幅は制限なし(複数のサブエージェントを並列実行可能)
呼び出し方
VS Code内で #runSubagent を使用:
#runSubagent を使って認証メカニズムを調査して、結果をまとめて
#file:api.ts を #runSubagent で分析して、セキュリティ上の問題を報告して
カスタムエージェントの設定
配置場所
| 場所 | スコープ |
|---|---|
.github/agents/ |
リポジトリ固有 |
{org}/.github/agents/ |
組織共通 |
~/.copilot/agents/ |
個人(CLI用) |
設定ファイル形式(.agent.md)
Claude Codeと同様、Markdown + YAMLフロントマター形式:
---
name: security-reviewer
description: セキュリティ観点でコードをレビュー。脆弱性、認証・認可の問題を検出。
tools:
- read
- search
- agent
---
# Security Review Agent
## Role
You are a senior security engineer with expertise in OWASP Top 10.
## Review Focus
1. SQL injection, XSS, CSRF vulnerabilities
2. Authentication and authorization issues
3. Secrets exposure in code
## Output Format
- Severity: Critical / High / Medium / Low
- Location: file:line
- Description: What's wrong
- Recommendation: How to fix
利用可能なツール
| ツール名 | エイリアス | 用途 |
|---|---|---|
execute |
shell, Bash | シェルコマンド実行 |
read |
Read | ファイル読み取り |
edit |
Edit, Write | ファイル編集 |
search |
Grep, Glob | 検索 |
agent |
Task | 他エージェント呼び出し |
runSubagent |
- | サブエージェント起動 |
ツール指定方法:
- 全て有効:
toolsプロパティを省略、またはtools: ["*"] - 特定のみ:
tools: ["read", "search"] - 全て無効:
tools: []
Handoffs(エージェント間遷移)
VS Codeでは、エージェント間のワークフローを定義できる:
---
name: planner
description: 実装計画を立てる
handoffs:
- label: "実装を開始"
agent: implementer
prompt: "上記の計画に基づいて実装してください"
send: false
---
Claude CodeではHooksを使ってチェーン化するが、Copilotではhandoffsとして宣言的に定義できる。
コンテキスト管理の設計思想
Copilotのアプローチ:モード切り替え
Copilotはモードによってコンテキスト収集の挙動が変わる:
| モード | コンテキスト収集 | 追加検索 |
|---|---|---|
| Ask/Edit | 意図検知で判断 | なし |
| Agent Mode | 自動で収集 | 必要に応じて追加 |
明示的なディレクティブ:
Claude Codeのアプローチ:常にエージェンティック
Claude Codeは常にエージェントとして動作し、必要に応じて自動で探索する。モード切り替えは不要。
どちらが良いか
これは**認知負荷をどこに置くか**の違い:
| ツール | 要求されるスキル |
|---|---|
| Copilot | モードの使い分け(ツール固有の知識) |
| Claude Code | プロンプトの書き方(汎用的なスキル) |
コンテキストの与え方が上手な人であれば、Claude Codeの方が「余計なUI/モード切り替えがない分シンプル」と感じるかもしれない。
Copilot Spaces vs Claude Projects
両者とも「コンテキストをまとめて管理する」機能だが、設計思想が異なる。
| 観点 | Copilot Spaces | Claude Projects |
|---|---|---|
| 共有モデル | GitHub権限を継承 | 個人/招待ベース |
| 同期 | リポジトリと自動同期 | 手動アップロード |
| 用途 | チーム内ナレッジ共有 | 個人ワークスペース |
| 場所 | GitHub上 | Claude.ai上 |
Copilot Spacesは「組織のナレッジハブをGitHubに統合する」発想、Claude Projectsは「個人のワークスペースを拡張する」発想である。
コードレビュー機能
Copilotには差分に対する専用のコードレビュー機能がある。
アクセス方法
- VS Code UI: Source Control > CHANGES > Copilot Code Review ボタン
- コマンド:
/review
/review # 未コミット差分をレビュー
/review develop main # ブランチ間の差分をレビュー
Agent Modeでの差分レビュー
Agent Modeで「差分をレビューして」と自然言語で指示することも可能だが、専用の /review コマンドの方が確実。
Claude Codeでは「変更をレビューして」と言えば自然に git diff を実行してレビューしてくれる。Copilotでも同様にできるが、専用UIがある分、そちらを使う方が確実という設計になっている。
モノレポでの構成
モノレポでGitHub Copilotのエージェント機能を使う場合、VS Codeで開いたフォルダがワークスペースルートになるという制約を理解する必要がある。
問題:親フォルダの設定が認識されない
/repo-root/
├── .github/
│ └── agents/ ← repo-rootを開いたときのみ有効
└── sub-project/
└── .github/
└── agents/ ← sub-projectを開いたときのみ有効
sub-project/をVS Codeで開いた場合、repo-root/.github/の設定は認識されない。
解決策:nested AGENTS.md
chat.useNestedAgentsMdFiles設定を有効にすると、サブフォルダのAGENTS.mdも再帰的に読み込まれる。
/repo-root/
├── AGENTS.md # 共通ルール
├── sub-project-frontend/
│ └── AGENTS.md # frontend固有の指示
├── sub-project-backend/
│ └── AGENTS.md # backend固有の指示
└── shared-lib/
└── AGENTS.md # 共有ライブラリ固有の指示
この構成では:
repo-root/を開くと、すべてのAGENTS.mdが認識される- 編集中のファイルに基づいて、適切な
AGENTS.mdが参照される
その他のアプローチ
| 方法 | 特徴 |
|---|---|
.instructions.mdのapplyTo |
パスパターンで適用範囲を限定 |
| repo-rootに専用エージェント定義 | プロンプトでディレクトリを指定(強制力弱め) |
| Copilot Spaces | サブプロジェクトごとにSpaceを作成 |
Claude Codeとの比較
Claude Codeでは「このディレクトリを探索して」とプロンプトで指示するだけで済む。Copilotは設定ファイルの配置と設定の有効化が必要で、モノレポ対応はまだ発展途上という印象がある。
Claude Codeとの比較まとめ
| 観点 | GitHub Copilot | Claude Code |
|---|---|---|
| 実行環境 | ローカル + クラウド | ローカルのみ |
| サブエージェント | #runSubagent |
Taskツール(自動) |
| 設定ファイル | .agent.md |
.md |
| 配置場所 | .github/agents/ |
.claude/agents/ |
| コンテキスト収集 | モード依存 | 常にエージェンティック |
| 差分レビュー | 専用UI + コマンド | 自然言語で依頼 |
| MCP連携 | あり | あり |
| ネスト制約 | 深さ1レベル | 深さ1レベル |
| モノレポ対応 | nested AGENTS.md等で対応 | プロンプトで指示 |
使い分けの指針
- 日常的なコーディング、IDE統合重視 → Copilot
- 複雑なリファクタリング、自律的なタスク実行 → Claude Code
- 非同期でバックグラウンド実行したい → Copilot Coding Agent
両者を併用するケースも増えている。